#!/bin/bash

# copy-files.sh - 自动拷贝 HBuilderX 生成的文件到 UniApp X 离线打包项目

set -e  # 遇到错误时退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 配置变量
UNIAPP_ID="__UNI__D8F70A7" # 根据实际情况修改 UniApp ID
HBUILDERX_PROJECT_PATH="../your-hbuilderx-project"  # 修改为实际的 HBuilderX 项目路径

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 显示帮助信息
show_help() {
    echo "HBuilderX 文件拷贝脚本"
    echo ""
    echo "使用方法:"
    echo "  ./copy-files.sh [选项]"
    echo ""
    echo "选项:"
    echo "  -p, --path PATH    指定 HBuilderX 项目路径"
    echo "  -i, --id ID        指定 UniApp ID (默认: $UNIAPP_ID)"
    echo "  -h, --help         显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  ./copy-files.sh -p ../my-hbuilderx-project"
    echo "  ./copy-files.sh --path /path/to/hbuilderx/project --id __UNI__ABCDEFG"
    echo ""
    echo "说明:"
    echo "  此脚本会拷贝以下文件："
    echo "  1. Java/Kotlin 源码: unpackage/resource/app-android/uniappx/app-android/src/* -> app/src/main/java/"
    echo "  2. UniApp 资源: unpackage/resource/app-android/$UNIAPP_ID -> app/src/main/assets/apps/"
}

# 检查源路径
check_source_path() {
    if [ ! -d "$HBUILDERX_PROJECT_PATH" ]; then
        print_error "HBuilderX 项目路径不存在: $HBUILDERX_PROJECT_PATH"
        print_error "请使用 -p 参数指定正确的路径"
        exit 1
    fi
    
    if [ ! -d "$HBUILDERX_PROJECT_PATH/unpackage/resource/app-android" ]; then
        print_error "HBuilderX 项目未生成 Android 资源"
        print_error "请在 HBuilderX 中先执行 '发行 -> 原生App-云打包' 或 '发行 -> 原生App-离线打包'"
        exit 1
    fi
}

# 备份现有文件
backup_existing_files() {
    local backup_dir="backup/$(date +%Y%m%d_%H%M%S)"
    
    print_info "备份现有文件到: $backup_dir"
    mkdir -p "$backup_dir"
    
    # 备份 Java 源码
    if [ -d "app/src/main/java/uni" ]; then
        cp -r app/src/main/java/uni "$backup_dir/"
        print_info "已备份 Java 源码"
    fi
    
    # 备份 UniApp 资源
    if [ -d "app/src/main/assets/apps/$UNIAPP_ID" ]; then
        mkdir -p "$backup_dir/assets"
        cp -r "app/src/main/assets/apps/$UNIAPP_ID" "$backup_dir/assets/"
        print_info "已备份 UniApp 资源"
    fi
    
    print_success "备份完成: $backup_dir"
}

# 拷贝 Java 源码文件
copy_java_sources() {
    local source_path="$HBUILDERX_PROJECT_PATH/unpackage/resource/app-android/uniappx/app-android/src"
    
    print_info "拷贝 Java/Kotlin 源码文件..."
    
    if [ ! -d "$source_path" ]; then
        print_warning "Java 源码目录不存在: $source_path"
        return 1
    fi
    
    # 确保目标目录存在
    mkdir -p app/src/main/java/
    
    # 拷贝文件
    cp -r "$source_path/"* app/src/main/java/
    
    print_success "Java/Kotlin 源码拷贝完成"
    
    # 显示拷贝的文件统计
    local file_count=$(find app/src/main/java/uni -name "*.kt" -o -name "*.java" 2>/dev/null | wc -l)
    print_info "共拷贝 $file_count 个源码文件"
}

# 拷贝 UniApp 资源文件
copy_uniapp_resources() {
    local source_path="$HBUILDERX_PROJECT_PATH/unpackage/resource/app-android/$UNIAPP_ID"
    
    print_info "拷贝 UniApp 资源文件..."
    
    if [ ! -d "$source_path" ]; then
        print_warning "UniApp 资源目录不存在: $source_path"
        print_warning "请检查 UniApp ID 是否正确: $UNIAPP_ID"
        return 1
    fi
    
    # 确保目标目录存在
    mkdir -p app/src/main/assets/apps/
    
    # 删除旧的资源文件
    if [ -d "app/src/main/assets/apps/$UNIAPP_ID" ]; then
        rm -rf "app/src/main/assets/apps/$UNIAPP_ID"
    fi
    
    # 拷贝新的资源文件
    cp -r "$source_path" app/src/main/assets/apps/
    
    print_success "UniApp 资源拷贝完成"
    
    # 显示拷贝的文件统计
    local file_count=$(find "app/src/main/assets/apps/$UNIAPP_ID" -type f 2>/dev/null | wc -l)
    print_info "共拷贝 $file_count 个资源文件"
}

# 验证拷贝结果
verify_copy_result() {
    print_info "验证拷贝结果..."
    
    local errors=0
    
    # 检查关键文件是否存在
    if [ ! -f "app/src/main/java/uni/$UNIAPP_ID/index.kt" ]; then
        print_error "缺少关键文件: app/src/main/java/uni/$UNIAPP_ID/index.kt"
        errors=$((errors + 1))
    fi
    
    if [ ! -f "app/src/main/assets/apps/$UNIAPP_ID/www/manifest.json" ]; then
        print_error "缺少关键文件: app/src/main/assets/apps/$UNIAPP_ID/www/manifest.json"
        errors=$((errors + 1))
    fi
    
    if [ $errors -eq 0 ]; then
        print_success "文件拷贝验证通过"
    else
        print_error "发现 $errors 个错误，请检查拷贝结果"
        exit 1
    fi
}

# 解析命令行参数
parse_arguments() {
    while [[ $# -gt 0 ]]; do
        case $1 in
            -p|--path)
                HBUILDERX_PROJECT_PATH="$2"
                shift 2
                ;;
            -i|--id)
                UNIAPP_ID="$2"
                shift 2
                ;;
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                print_error "未知参数: $1"
                show_help
                exit 1
                ;;
        esac
    done
}

# 主函数
main() {
    echo "🚀 HBuilderX 文件拷贝脚本"
    echo "================================"
    
    # 解析命令行参数
    parse_arguments "$@"
    
    # 显示配置信息
    print_info "HBuilderX 项目路径: $HBUILDERX_PROJECT_PATH"
    print_info "UniApp ID: $UNIAPP_ID"
    echo ""
    
    # 检查是否在项目根目录
    if [ ! -f "gradlew" ]; then
        print_error "请在项目根目录运行此脚本"
        exit 1
    fi
    
    # 检查源路径
    check_source_path
    
    # 备份现有文件
    backup_existing_files
    
    # 拷贝文件
    copy_java_sources
    copy_uniapp_resources
    
    # 验证结果
    verify_copy_result
    
    echo ""
    print_success "🎉 文件拷贝完成！"
    print_info "现在可以使用 './build.sh release' 构建应用"
}

# 执行主函数
main "$@"